#ifndef MINIMUSIC_H
#define MINIMUSIC_H

#include <QWidget>
#include <QPoint>
#include <QJsonArray>
#include "volumetool.h"
#include "musiclist.h"
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include "commonpage.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MiniMusic; }
QT_END_NAMESPACE

class MiniMusic : public QWidget
{
    Q_OBJECT

public:
    MiniMusic(QWidget *parent = nullptr);
    ~MiniMusic();

    void initUI();

    void initPlayer();

    void connectSianalSlots();

    QJsonArray RandomPicture();


private slots:
    void on_quit_clicked();
    void onBtFormClick(int pageId);

    void on_volume_clicked();

    void on_addlocal_clicked();

    void onUpdateLikeMusic(bool isLike, QString musicId);

    // 播放控制区的槽函数
    // 播放按钮：歌曲在播放和暂停之间切换
    void onPlayMusic();

    // 上一曲
    void onPlayUpClicked();

    // 下一曲
    void onPlayDownClicked();

    // 播放模式设置
    void onPlaybackModeClicked();


    void onPlayAll(PageType pageType);// 播放所有按钮，发射信号对应的槽函数
    void playAllMusicOfCommonPage(CommonPage* page, int index);
    void playMusicByIndex(CommonPage* page, int index);
    void setPlayerMuted(bool isMuted);


    void setPlayerVolume(int volume);
    // QMediaPlayer中stateChanged信号对应槽函数
    void onPlayerStateChanged();

    void onPlaybackModeChanged(QMediaPlaylist::PlaybackMode playbackMode);

    void OnCurrentIndexChanged(int index);  // 播放源发生了改变

    void onDurationChanged(qint64 duration);
    void onPositionChanged(qint64 position);
    void onMusicSliderChanged(float ration);

protected:
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);


private:
    Ui::MiniMusic *ui;
    QPoint dragPosition;

    MusicList musicList;    // 程序用来组织歌曲文件
    VolumeTool* volumeTool;

    QMediaPlayer* player;   // 专门用来控制播放
    QMediaPlaylist* playList;   // 专门用来管理播放源，包含一些播放模式设置等
    CommonPage* currentPage;

    qint64 totalTime;
};
#endif // MINIMUSIC_H
